package com.dzl.util.wx.third;

import com.dzl.util.RedisUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 功能描述：微信服务商缓存调用工具类
 * @Author: liuguanjun
 * @Date: 2022/01/15 17:27
 */
@Slf4j
public  class WebChatCatchUtil {



    //public static String SYS_WEIXIN_OPEN_PREAUTHCODE = "SYS_WEIXIN_OPEN_PREAUTHCODE";

    /****
     * 验证票据
     * 验证票据（component_verify_ticket），在第三方平台创建审核通过后，微信服务器会向其 ”授权事件接收URL” 每隔 10 分钟以 POST 的方式推送 component_verify_ticket
     * 接收 POST 请求后，只需直接返回字符串 success。为了加强安全性，postdata 中的 xml 将使用服务申请时的加解密 key 来进行加密，具体请见《加密解密技术方案》, 在收到推送后需进行解密（详细请见《消息加解密接入指引》）。
     * 注意：component_verify_ticket 的有效时间为12小时，比 component_access_token 更长，建议保存最近可用的component_verify_ticket，在 component_access_token 过期之前都可以直接使用该 component_verify_ticket 进行更新，避免出现因为 component_verify_ticket 接收失败而无法更新 component_access_token 的情况。
     */
    public static String SYS_WEIXIN_OPEN_COMPONENT_VERIFY_TICKET = "WeixinOpenComponentVerifyTicket";

    /*****
     * 令牌（component_access_token）是第三方平台接口的调用凭据。令牌的获取是有限制的，每个令牌的有效期为 2 小时，请自行做好令牌的管理，在令牌快过期时（比如1小时50分），重新调用接口获取。
     * 如未特殊说明，令牌一般作为被调用接口的 GET 参数 component_access_token 的值使用
     */
    public static String SYS_WEIXIN_OPEN_COMPONENT_ACCESS_TOKEN = "WeixinOpenComponentAccessToken";

    /*****
     * 预授权码（pre_auth_code）是第三方平台方实现授权托管的必备信息，每个预授权码有效期为 1800秒。需要先获取令牌才能调用
     */
    public static String SYS_WEIXIN_OPEN_PRE_AUTH_CODE = "WeixinOpenPreAuthCode";

    /*****
     * 接口调用令牌（在授权的公众号/小程序具备 API 权限时，才有此返回值）
     */
    public static String SYS_WEIXIN_OPEN_AUTHORIZER_ACCESS_TOKEN = "WeixinOpenAuthorizerAccessToken";

    /*****
     * 刷新令牌（在授权的公众号具备API权限时，才有此返回值），刷新令牌主要用于第三方平台获取和刷新已授权用户的 authorizer_access_token。一旦丢失，只能让用户重新授权，才能再次拿到新的刷新令牌。用户重新授权后，之前的刷新令牌会失效
     */
    public static String SYS_WEIXIN_OPEN_AUTHORIZER_REFRESH_TOKEN = "WeixinOpenAuthorizerRefreshToken";


    public static String getWeixinOpenComponentVerifyTicket(){
        Object token = RedisUtil.get(SYS_WEIXIN_OPEN_COMPONENT_VERIFY_TICKET);
        log.info("WebChatCatchUtil======================getWeixinOpenComponentVerifyTicket:"+token);
        if(token!=null && !token.equals("null")){
            return token.toString();
        }
        return "";
    }

    public static String getWeixinOpenComponentAccesstoken(){
        Object token = RedisUtil.get(SYS_WEIXIN_OPEN_COMPONENT_ACCESS_TOKEN);
        log.info("WebChatCatchUtil======================getWeixinOpenComponentAccesstoken:"+token);
        if(token!=null && !token.equals("null")){
            return token.toString();
        }
        return "";
    }

    public static String getWeixinOpenPreAuthCode(){
        Object token = RedisUtil.get(SYS_WEIXIN_OPEN_PRE_AUTH_CODE);
        log.info("WebChatCatchUtil======================getWeixinOpenPreAuthCode:"+token);
        if(token!=null && !token.equals("null")){
            return token.toString();
        }
        return "";
    }

    public static String getWeixinOpenAuthorizerAccessToken(String authorizerAppid){
        Object token = RedisUtil.get(SYS_WEIXIN_OPEN_AUTHORIZER_ACCESS_TOKEN+authorizerAppid);
        log.info("WebChatCatchUtil======================getWeixinOpenAuthorizerAccessToken:"+token);
        if(token!=null && !token.equals("null")){
            return token.toString();
        }
        return "";
    }

    public static String getWeixinOpenAuthorizerRefreshToken(String authorizerAppid){
        Object token = RedisUtil.get(SYS_WEIXIN_OPEN_AUTHORIZER_REFRESH_TOKEN+authorizerAppid);
        log.info("WebChatCatchUtil======================getWeixinOpenAuthorizerRefreshToken:"+token);
        if(token!=null && !token.equals("null")){
            return token.toString();
        }
        return "";
    }

    public static void setWeixinOpenComponentVerifyTicket(String token, Integer expires_in){
        log.info("WebChatCatchUtil======================setWeixinOpenComponentVerifyTicket:token"+token+",expires_in:"+expires_in);
        RedisUtil.set(SYS_WEIXIN_OPEN_COMPONENT_VERIFY_TICKET, token,expires_in);
    }

    public static void setWeixinOpenComponentAccessToken(String token, Integer expires_in){
        log.info("WebChatCatchUtil======================setWeixinOpenComponentAccessToken:token"+token+",expires_in:"+expires_in);
        RedisUtil.set(SYS_WEIXIN_OPEN_COMPONENT_ACCESS_TOKEN, token,expires_in);
    }

    public static void setWeixinOpenPreAuthCode(String authCode, Integer expires_in){
        log.info("WebChatCatchUtil======================setWeixinOpenPreAuthCode:authCode"+authCode+",expires_in:"+expires_in);
        RedisUtil.set(SYS_WEIXIN_OPEN_PRE_AUTH_CODE, authCode,expires_in);
    }

    public static void setWeixinOpenAuthorizerAccessToken(String authorizerAccessToken,Integer accessTokenexpiresIn){
        log.info("WebChatCatchUtil======================setWeixinOpenAuthorizerAccessToken:authorizerAccessToken"+authorizerAccessToken+",expires_in:"+accessTokenexpiresIn);
        RedisUtil.set(SYS_WEIXIN_OPEN_AUTHORIZER_ACCESS_TOKEN, authorizerAccessToken,accessTokenexpiresIn);
    }

    public static void setWeixinOpenAuthorizerAccessToken(String authorizerAppid,String authorizerAccessToken,Integer accessTokenexpiresIn){
        log.info("WebChatCatchUtil======================setWeixinOpenAuthorizerAccessToken:authorizerAccessToken"+authorizerAccessToken+",expires_in:"+accessTokenexpiresIn+",authorizerAppid:"+authorizerAppid);
        RedisUtil.set(SYS_WEIXIN_OPEN_AUTHORIZER_ACCESS_TOKEN+authorizerAppid, authorizerAccessToken,accessTokenexpiresIn);
    }

    public static void setWeixinOpenAuthorizerRefreshToken(String authorizerAppid,String authorizerRefreshToken,Integer accessTokenexpiresIn){
        log.info("WebChatCatchUtil======================setWeixinOpenAuthorizerRefreshToken:authorizerRefreshToken"+authorizerRefreshToken+",expires_in:"+accessTokenexpiresIn+",authorizerAppid:"+authorizerAppid);
        RedisUtil.set(SYS_WEIXIN_OPEN_AUTHORIZER_REFRESH_TOKEN+authorizerAppid, authorizerRefreshToken,accessTokenexpiresIn);
    }

}
